package com.blb.zycommunity.utils;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;

import com.blb.zycommunity.entity.SysUser;
import com.blb.zycommunity.service.ISysUserService;

import java.util.ArrayList;
import java.util.List;

public class UserListener extends AnalysisEventListener<SysUser> {

    /**
     * 暂时用于存储数据的集合
     */
    private List<SysUser> datas = new ArrayList<>();
    private ISysUserService sysUserService;
    private String statusCode;

    public UserListener(ISysUserService sysUserService, String statusCode) {
        this.sysUserService = sysUserService;
        this.statusCode = statusCode;
    }

    /**
     * 每读一条数据都会执行一次该方法
     *
     * @param sysUser
     * @param analysisContext
     */
    @Override
    public void invoke(SysUser sysUser, AnalysisContext analysisContext) {
        List<SysUser> list = sysUserService.list();
        //允许更新已存在的用户数据
        if ("true".equals(statusCode)) {
            //用户名不为空且用户名称不重复,将数据添加到集合中
            if (sysUser.getUserName() != null && !list.contains(sysUser.getUserName())) {
                datas.add(sysUser);
            }
        }
        //不允许允许更新已存在的用户数据
        if ("false".equals(statusCode)) {
            // 导入的userId 不在 数据库list 中且用户名称不重复
            if (list.indexOf(sysUser.getUserId()) == -1 && sysUser.getUserName() != null && !list.contains(sysUser.getUserName())) {
                datas.add(sysUser);
            }
        }
    }

    /**
     * 当所有的数据都读完了才会来调用该方法
     *
     * @param analysisContext
     */
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        // 将集合中的数据保存到数据库中
        sysUserService.saveOrUpdateBatch(datas);
        System.out.println(("所有数据解析完成！"));
        //清理保存数据的集合
        datas.clear();
    }


    public List<SysUser> getDatas() { //把存储的数据通过此方法暴露出去
        return datas;
    }
}
